Python网络爬虫入门笔记1 |
您所在的位置:网站首页 › jupyter notebook会自动关闭 › Python网络爬虫入门笔记1 |
使用程序:jupyter notebook 语言:Python3 jupyter中 Markdown用来写笔记,同时能写html代码,Code用来写代码 特性:代码编写顺序无所谓,执行顺序一定是自上而下的。(只要在一个cell中执行定义好多变量函数等,那么数据就会被加载到当前文件缓存中) -jupyter快捷操作: -插入cell a,b 上插,下插 -删除cell x -执行cell shift+enter -切换cell模式 m,y 切 markdown,切code -切换成编辑模式 代码左侧双击 -执行结果收回 结果左侧双击 -打开帮助文档 shift+tab 调用方法时不知道方法用法 -自动补全 tab -查看快捷键 空白区域左键+h 原文件可导出为html File--DownLoad as--html一般情况下不要导出,会造成图片缺失 爬虫:编写程序模拟浏览器上网爬取数据 分类 -通用爬虫(爬一整张页面源码数据) -聚焦爬虫(爬取一部分数据,建立在通用爬虫基础上) -增量式爬虫(监测网站更新情况,以便爬取最新更新出来的数据) -分布式爬虫(提高爬取效率的终极武器,一般情况不用,因为太快了,会干扰别人网站) -反爬机制 -作用到门户网站,保护数据 -反反爬策略 -作用到爬虫程序,破解反爬机制 -风险 :-干扰网站的正确运行 - 爬取受法律保护的数据或信息 -如何避免进局子? -时常优化自己的爬虫程序 -在使用传播自己爬取的数据时,审查自己抓取的内容,如果发现了涉及用户隐私和商业机密内容,注意及时停止爬取或传播 -反爬机制 -robots协议:防君子不防小人,嘿嘿 -纯文本协议,协议规定网站中哪些数据可以被爬取,哪些不可以被爬取 -破解:主观性的不遵从该协议即可 -UA检测:网络后台会检测对应的user-agent,判定当前请求是否异常请求 -破解: UA伪装,即通过抓包工具获取基于浏览器的user-agent值,将其伪装作用到一个字典中,并将该字典作用到请求方法(get,post)的headers参数中 -request模块:爬虫中基于网络请求的一个模块 pip install (需要导入的模块名) -i http://pypi.douban.com/simple --trusted-host pypi.douban.com -作用:模拟浏览器发出请求 -编码流程: -1.指定url -2.发起请求 -3.获取响应数据(爬取到的页面源码数据) -4.持久化储存 1.爬取搜狗浏览器 import requests #1.指定url url = 'https://www.sogou.com/' #2.发起请求get方法的返回值为请求对象 response = requests.get(url=url) #3.获取响应数据 .text返回字符串类型的响应数据 page_text = response.text #4.持久化储存 with open('./sogou.html','w',encoding='utf-8') as fp: fp.write(page_text)
2.-实现简易网页采集器 -基于搜狗针对不同的关键词将其对应的页面数据进行爬取 import requests keyWord = input('enter a key world:') headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57' } # 携带请求参数的url,想要爬取不同关键词对应的页面,需要将url携带参数动态化 # 实现参数动态化: # 1.携带参数以键值对形式封存到一个字典中 # 2.字典作用到get方法params参数中 # 3.原始携带参数的url需要将参数删除 params ={ 'query':keyWord } url = 'http://www.sogou.com/web' # params参数(字典):保存请求时url携带参数, # 实现了UA伪装 response = requests.get(url = url,params = params,headers = headers) # 若出现乱码,则修改响应数据的编码格式为utf-8,目前本人没遇到,但是写了肯定没错 response.encoding = 'utf-8' page_text = response.text fileName = keyWord + '.html' with open(fileName,'w',encoding='utf-8') as fp: fp.write(page_text) print(fileName,'爬取完毕!!!') # 出现问题:异常访问请求(网站后台检测出该次请求是爬虫程序发出,不是浏览器发起的请求都是异常访问请求) #如何判判定是否浏览器发起的请求(判定请求头中的user-agent) user-agent -- 请求载体的身份标识 #请求载体 : 浏览器(浏览器的身份标识统一固定,身份标识可以从抓包工具中获取)或爬虫程序(身份标识是各自不同的)3.-爬取豆瓣电影的电影详情数据 url:https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action= -动态加载数据的捕获 -动态加载数据:使用requests模块无法实现每次都可见 原因:有些数据是通过非浏览器地址栏的url请求到的,这些通过其他请求请求到的数据就是动态加载的数据 -如何检测是否存在动态加载数据:基于抓包工具进行局部搜索 找个响应中内容ctrl+f搜索想要爬取数据 0 of 0 即为动态加载数据 -如何捕获动态加载数据:基于抓包工具进行全局搜索(非100%成功) 列表栏单击然后ctrl+f 定位到动态加载数据包可以提取出 -请求的url(去掉问号后内容) -请求方式 -请求携带的参数 -看到响应数据 import requests headers ={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57' } url = 'https://movie.douban.com/j/chart/top_list' params = { 'type': 13, 'interval_id': '100:90',#评分区间 'action': '', 'start': '0', #从第几部开始取 'limit': '20' #一次取多少部 } response = requests.get(url = url,params = params,headers = headers) # .json将获取字符串形式的json数据反序列化字典或者列表 page_text = response.json() # 解析出电影名称和评分 for movie in page_text: name =movie['title'] score = movie['score'] print(name,score)
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |